package com.gehj.uhttp;



import android.content.Context;

import com.gehj.alluitls.androidUtils.LogUtil;
import com.gehj.alluitls.androidUtils.SharePreferenceUtils;

import org.jetbrains.annotations.NotNull;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

/*
 * token拦截器
 * 1，没有token直接添加
 * 2，token过期则重新请求refresh—token，token
 * 3，可以简化逻辑，只要是401就直接返重新登陆
 * */
public class TokenInterceptor implements Interceptor {
    private static final String TAG = "TokenInterceptor";
    private static Context mContext;

    public TokenInterceptor(Context context) {
        mContext = context;
    }




    @NotNull
    @Override
    public Response intercept(@NotNull Chain chain) throws IOException {
        String mToken = SharePreferenceUtils.getString(mContext,
                GlobleURL_GoodDriver_Business.ACCESS_TOKEN);
        Request originRequest = chain.request();

        Request request = originRequest.newBuilder().
                addHeader(GlobleURL_GoodDriver_Business.Authorization
                , GlobleURL_GoodDriver_Business.PREFIX_TOKEN + mToken).
               // addHeader("Accept-Language","zh-cn,zh;q=0.5").
               //addHeader("Accept-Encoding","identity").
                build();//所有的请求都需要先加token的请求头；
        Response originResponse = chain.proceed(request);
        LogUtil.d(TAG, "response.code=" + originResponse.code());

        //根据和服务端的约定判断token过期,过期的话再重新请求一次；
        //TODO 因为refresh_token的接口没好，所以还是先不用refreshToken工作
        /*if (isTokenExpired(originResponse)) {
            LogUtil.d(TAG, "自动刷新Token,然后重新请求数据");
            //同步请求方式，获取最新的Token
            String newToken = getNewToken();
            //使用新的Token，创建新的请求
            Request newRequest = chain.request()
                    .newBuilder()
                    .header("GloubleUrl.Authorization",GlobleURL.PREFIX_TOKEN
                            + newToken)
                    .build();
            return chain.proceed(newRequest);
        }*/
        return originResponse;
    }

    /**
     * 根据Response，判断Token是否失效
     *
     * @param response
     * @return
     */
    private boolean isTokenExpired(Response response) {
        if (response.code() == 401) {
            return true;
        }
        return false;
    }


    /**
     * 同步请求方式，获取最新的Token
     *
     * @return
     */
    private String getNewToken() throws IOException {
        // 通过获取token的接口，同步请求接口
        //TODO refresh_Token接口需要再进行测试，不知道是post还是get请求，如果是post需要什么参数；
        String[] newToken = {""};
        OkhttpUtils.get_data(GlobleURL_GoodDriver_Business.refreshTokenUrl, new Callback() {
            @Override
            public void onFailure(@NotNull Call call, @NotNull IOException e) {

            }

            @Override
            public void onResponse(@NotNull Call call, @NotNull Response response)
                    throws IOException {
                //获取返回值
                //TODO 需要给newToken一个默认值，比如上次的token，如果新的请求失败就跳回登录页
                newToken[0] = response.body().string();
                SharePreferenceUtils.putString(mContext,//TODO 这里是空指针
                        GlobleURL_GoodDriver_Business.ACCESS_TOKEN, newToken[0]);



            }
        });
        return newToken[0];
    }

}

